#include <string>
#include <iostream>
#include <stdlib.h>
#include <fstream>
#include "GeneradorDeListadoDeDirectorio.h"
#include "RutasDocumentos.h"
#include "AsistenteObtencionDeTerminos.h"
#include "CaracteresHandler.h"

#ifndef PARSER_H_
#define PARSER_H_

#define ARCHIVO_PARSER "Parser.bin"
#define ARCHIVO_PARSER1 "Parser1.bin"


using namespace std;

/*
 * Una instancia de la clase Parser permite explorar una serie de documentos recuperando
 * los términos contenidos en los mismos.
 * De esta manera se generará un archivo final que permite conocer en que documentos
 * aparece cada término y la frecuencia con que lo hace.
 */
class Parser {
private:

	unsigned int cantidadDeDocumentos;

	unsigned int cantidadDeTerminos;

	unsigned int cantidadDePunteros;

	bool almacenaOcurrencias;

public:

	/*
	 *Pre:
	 *Post: La instancia ha sido creada.
	*/
	Parser();

	/*
	 * Pre: La instancia ha sido creada.
	 * Post: La instancia ha sido destruida liberando los recursos asociados.
	 */
	virtual ~Parser();

	/*
	 * Pre: La instancia ha sido creada y el primer parámetro indica el directorio dónde
	 * se encuentra el archivo con las rutas de los documentos. El parámetro restante
	 * indica el directorio donde se quiere guardar el resultado de la ejecución del
	 * parser.
	 * Post:
	 */
	bool ejecutarParser(const string & directorioArchivoRutasDocumentos ,
						const string & directorioDestino);

	/*
	 * Pre: La instancia ha sido creada.
	 * Post: Se retorna la cantidad de documentos recuperados.
	 */
	unsigned int getCantidadDeDocumentos();

private:

	/*
	 * Pre: La instancia ha sido creada.
	 * Pos: Se han recuperando los términos generando un archivo con los mismos.
	 *
	 */
	void recuperarTerminos(const string & directorioArchivoRutasDocumentos ,
						const string & directorioDestino);

	/*
	 * Pre: La instancia ha sido creada y se han recuperado los terminos del
	 * directorio.
	 * Post: Se han generado las particiones con los terminos ordenados.
	*/
	void ordenarTerminos(const string & directorio);


};

#endif /* PARSER_H_ */
